package my_web.page.Imp;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import my_web.bean.EasyUIPage;
import my_web.page.Page;
import my_web.page.PageEngine;
import my_web.page.PageParam;
public class PageImp implements Page {
	/**
	 * 当前页curr和每页最大记录数rows通过PageParam pageParam传入
	 */
	private int curr=1;//当前页
	private int rows=10;//每页最大记录数
	/**
	 * 总记录数和当前页实际记录数通过PageEngine engine传入
	 */
	private int total;//总记录数
	private List<?> reclist;//当前页实际记录数
	private int pgTotal;//总页数--计算
	//构造方法
	public PageImp(PageEngine engine,PageParam pageParam) throws PageException{
		//1.获得每页最大记录数
		try {
			rows=Integer.parseInt(pageParam.getRows());
		} catch (NumberFormatException e) {}
		if(rows<1){
			throw new PageException("每页最大允许记录数不少于1！");
		}
		//2.获取总记录数
		try {
			total=engine.getTotal();
		} catch (Exception e) {
			throw new PageException("获取总记录数失败!",e);	
		}
		if(total<0){
			throw new PageException("获取了错误的总记录数!");		
		}
		//3.计算总页数
		if(total==0){
			pgTotal=1;	
		}else if(total%rows==0){
			pgTotal=total/rows;
		}else{
			pgTotal=total/rows+1;
		}
		//4.获取当前页码
		try {
			curr=Integer.parseInt(pageParam.getPage());
		} catch (NumberFormatException e) {}
		if(curr<getFirst()){
			curr=getFirst();
		}else if(curr>getPgTotal()){
			curr=getPgTotal();
		}
		//5.获取当前页记录
		try {
			int start=(curr-1)*rows;//起始行（不包含）
			int end=curr*rows;//结束行（包含）
			reclist=engine.getReclist(start,end);
		} catch (Exception e) {
			throw new PageException("获取当前页面数据记录失败!",e);	
		}
	}
	public int getFirst() {
		return 1;
	}
	public int getPrior() {
		return getCurr()-1<getFirst()?getFirst():(getCurr()-1);
	}
	public int getNext() {
		return getCurr()+1>getLast()?getLast():(getCurr()+1);
	}
	public int getLast() {
		return  pgTotal;
	}
	public int getCurr() {
		return curr;
	}
	public int getPgTotal() {
		return  pgTotal;
	}
	public int getTotal() {
		return total;
	}
	public int getRows() {
		return rows;
	}
	public int getCurrRows() {
		return reclist.size();
	}
	public List<?> getReclist() {
		return reclist;
	}
	/**
	 * 分页组件与前段框架easy-ui框架相结合
	 */
	@Override
	public EasyUIPage getEasyPage() {
		return new EasyUIPage() {
			public int getTotal() {
				return total;
			}
			public List<?> getRows() {
				return reclist;
			}
		};
	}
	public Map getEasyPage2() {
		Map<String, Object> map=new HashMap<>();
		map.put("total", total);
		map.put("rows",reclist);
		return map;
	}
}
